// Copyright 2023 The Perses Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// NB: This file complements the dashboard_go_gen.cue file generated by
// `cue get go` to add the missing constraints lost in the translation
// process. This should no longer be needed at some point hopefully, but for
// the moment, because of a technical limitation in the CUE translation
// process, a top-value (= "any") gets generated instead of a proper def for
// any type that defines a custom UnmarshallJSON or UnmarshallYAML.
// For more info see https://github.com/cue-lang/cue/issues/2466.

package v1

import (
	"github.com/perses/perses/cue/model/api/v1/common"
	"github.com/perses/perses/cue/model/api/v1/dashboard"
)

#PanelDisplay: {
	name:         string @go(Name)
	description?: string @go(Description)
}

#Panel: {
	kind: "Panel"
}

#DashboardSpec: {
	display?: common.#Display @go(Display)
	datasources?: {
		[string]: #DatasourceSpec @go(Datasources)
	}
	variables?: [...dashboard.#Variable] @go(Variables,[]Variable)
	panels: {
		[string]: #Panel @go(Panels)
	}
	layouts: [...dashboard.#Layout] @go(Layouts,[]Layout)
	duration:         common.#Duration | *"1h" @go(Duration)
	refreshInterval?: common.#Duration         @go(RefreshInterval)
}

#Dashboard: {
	kind:     #KindDashboard   @go(Kind)
	metadata: #ProjectMetadata @go(Metadata)
	spec:     #DashboardSpec   @go(Spec)
}
